// Create a jquery plugin that prints the given element.
jQuery.fn.print = function() {
// NOTE: We are trimming the jQuery collection down to the
// first element in the collection.
    if (this.size() > 1) {
        this.eq(0).print();
        return;
    } else if (!this.size()) {
        return;
    }

// ASSERT: At this point, we know that the current jQuery
// collection (as defined by THIS), contains only one
// printable element.

// Create a random name for the print frame.
    var strFrameName = ("printer-" + (new Date()).getTime());

// Create an iFrame with the new name.
    var jFrame = $("<iframe name='" + strFrameName + "'>");

// Hide the frame (sort of) and attach to the body.
    jFrame
            .css("width", "1px")
            .css("height", "1px")
            .css("position", "absolute")
            .css("left", "-9999px")
            .appendTo($("body:first"))
            ;

// Get a FRAMES reference to the new frame.
    var objFrame = window.frames[ strFrameName ];

// Get a reference to the DOM in the new frame.
    var objDoc = objFrame.document;

// Grab all the style tags and copy to the new
// document so that we capture look and feel of
// the current document.

// Create a temp document DIV to hold the style tags.
// This is the only way I could find to get the style
// tags into IE.
    var jStyleDiv = $("<div>").append(
            $("style").clone()
            );

// Write the HTML for the document. In this, we will
// write out the HTML of the current element.
    objDoc.open();
    objDoc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
    objDoc.write("<html>");
    objDoc.write("<body>");
    objDoc.write("<head>");
    objDoc.write('<link type="text/css" rel="stylesheet" href="' + ASSET_DIR + 'css/bootstrap.min.css"');
    objDoc.write(document.title);
    objDoc.write("</title>");
    objDoc.write(jStyleDiv.html());
    objDoc.write("</head>");
    objDoc.write("<style>");
    objDoc.write('table .appoint, table .room{border-bottom:1px solid #DDD;}');
    objDoc.write("</style>");
    objDoc.write(this.html());
    objDoc.write("</body>");
    objDoc.write("</html>");
    objDoc.close();

// Print the document.
    objFrame.focus();
    objFrame.print();

// Have the frame remove itself in about a minute so that
// we don't build up too many of these frames.
    setTimeout(
            function() {
                jFrame.remove();
            },
            (60 * 1000)
            );
}
